import vue from 'rollup-plugin-vue';
import babel from '@rollup/plugin-babel';
import postcss from 'rollup-plugin-postcss';
import { createRequire } from 'module'; // 引入 createRequire
const require = createRequire(import.meta.url); // 创建 require
const components = require('./components.json'); // 使用 require 加载 JSON

const createComponentConfig = ([name, path]) => ({
  input: path,
  output: {
    file: `dist/${name}.js`,
    format: 'esm',
  },
  plugins: [
    vue({
      compileTemplate: true, // 确保模板编译为 render 函数
    }),
    babel({
      babelHelpers: 'bundled',
      extensions: ['.js', '.jsx', '.vue'], // 处理 .vue 和 JSX 文件
      exclude: 'node_modules/**',
      presets: [
        '@babel/preset-env',
        [
          '@vue/babel-preset-jsx', // 使用 Vue 2 的 JSX 预设
          {
            functional: false, // 确保支持非函数式组件
          },
        ],
      ],
    }),
    postcss({
      extract: true,
      minimize: true,
      sourceMap: true,
      extensions: ['.scss', '.css'],
      use: {
        sass: {
          quietDeps: true, // 静默依赖警告
        },
      },
    }),
  ],
  external: ['vue', 'element-ui'],
});

export default [
  {
    input: 'src/index.js',
    output: [
      {
        file: 'dist/index.js',
        format: 'cjs',
      },
      {
        file: 'dist/index.esm.js',
        format: 'esm',
      },
    ],
    plugins: [
      vue({
        compileTemplate: true, // 确保模板编译为 render 函数
      }),
      babel({
        babelHelpers: 'bundled',
        extensions: ['.js', '.jsx', '.vue'], // 处理 .vue 和 JSX 文件
        exclude: 'node_modules/**',
        presets: [
          '@babel/preset-env',
          [
            '@vue/babel-preset-jsx', // 使用 Vue 2 的 JSX 预设
            {
              functional: false, // 确保支持非函数式组件
            },
          ],
        ],
      }),
      postcss({
        extract: true,
        minimize: true,
        sourceMap: true,
        extensions: ['.scss', '.css'],
        use: {
          sass: {
            quietDeps: true, // 静默依赖警告
          },
        },
      }),
    ],
    external: ['vue', 'element-ui'],
  },
  ...Object.entries(components).map(createComponentConfig),
];
